home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xalan.jar / org / apache / xalan / xslt / StylesheetHandler.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-04-12  |  20.3 KB  |  936 lines

  1. package org.apache.xalan.xslt;
  2.  
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.net.MalformedURLException;
  6. import java.net.URL;
  7. import java.util.Stack;
  8. import java.util.StringTokenizer;
  9. import java.util.Vector;
  10. import org.apache.xalan.xpath.XPath;
  11. import org.apache.xalan.xpath.xml.MutableAttrListImpl;
  12. import org.apache.xalan.xpath.xml.NameSpace;
  13. import org.apache.xalan.xpath.xml.StringToStringTable;
  14. import org.apache.xalan.xpath.xml.XSLMessages;
  15. import org.w3c.dom.Node;
  16. import org.xml.sax.AttributeList;
  17. import org.xml.sax.DocumentHandler;
  18. import org.xml.sax.Locator;
  19. import org.xml.sax.SAXException;
  20.  
  21. public class StylesheetHandler implements DocumentHandler {
  22.    XSLTEngineImpl m_processor;
  23.    Stylesheet m_stylesheet;
  24.    Stack m_elems = new Stack();
  25.    Stack m_whiteSpaceElems = new Stack();
  26.    ElemTemplate m_template;
  27.    ElemTemplateElement m_lastPopped;
  28.    boolean m_inTemplate = false;
  29.    boolean m_foundStylesheet = false;
  30.    boolean m_foundNotImport = false;
  31.    boolean m_inLXSLTScript = false;
  32.    StringBuffer m_LXSLTScriptBody;
  33.    String m_LXSLTScriptLang;
  34.    String m_LXSLTScriptSrcURL;
  35.    ExtensionNSHandler m_LXSLTExtensionNSH;
  36.    public String m_includeBase;
  37.    private boolean warnedAboutOldXSLTNamespace = false;
  38.    static final String m_oldXSLNameSpaceURL = "http://www.w3.org/XSL/Transform/1.0";
  39.  
  40.    public StylesheetHandler(XSLTEngineImpl var1, Stylesheet var2) {
  41.       this.m_processor = var1;
  42.       this.m_stylesheet = var2;
  43.       this.m_includeBase = this.m_stylesheet.m_baseIdent;
  44.    }
  45.  
  46.    public void setDocumentLocator(Locator var1) {
  47.       this.m_processor.m_stylesheetLocatorStack.push(var1);
  48.    }
  49.  
  50.    public void startDocument() throws SAXException {
  51.    }
  52.  
  53.    public void endDocument() throws SAXException {
  54.       if (!this.m_processor.m_stylesheetLocatorStack.empty()) {
  55.          this.m_processor.m_stylesheetLocatorStack.pop();
  56.       }
  57.  
  58.    }
  59.  
  60.    private boolean isAttrOK(String var1, AttributeList var2, int var3) {
  61.       return this.m_stylesheet.isAttrOK(var1, var2, var3);
  62.    }
  63.  
  64.    private boolean processSpaceAttr(String var1, AttributeList var2, int var3) throws SAXException {
  65.       boolean var4 = var1.equals("xml:space");
  66.       if (var4) {
  67.          String var5 = var2.getValue(var3);
  68.          if (var5.equals("default")) {
  69.             this.m_stylesheet.m_defaultSpace = true;
  70.          } else {
  71.             if (!var5.equals("preserve")) {
  72.                throw new SAXException(XSLMessages.createMessage(77, new Object[]{var5}));
  73.             }
  74.  
  75.             this.m_stylesheet.m_defaultSpace = false;
  76.          }
  77.       }
  78.  
  79.       return var4;
  80.    }
  81.  
  82.    private boolean isXSLTNameSpace(String var1) throws SAXException {
  83.       boolean var2 = false;
  84.       boolean var3 = var1 != null && (var1.equals("http://www.w3.org/1999/XSL/Transform") || (var2 = var1.equals("http://www.w3.org/XSL/Transform/1.0")));
  85.       if (var2 && !this.warnedAboutOldXSLTNamespace) {
  86.          this.warnedAboutOldXSLTNamespace = true;
  87.          this.m_processor.warn(18, new Object[]{var1});
  88.       }
  89.  
  90.       return var3;
  91.    }
  92.  
  93.    private String getLocalName(String var1) {
  94.       int var2 = var1.indexOf(58);
  95.       return var2 < 0 ? var1 : var1.substring(var2 + 1);
  96.    }
  97.  
  98.    private void processStripAndPreserve(String var1, AttributeList var2, int var3, int var4, int var5) throws SAXException {
  99.       ElemEmpty var6 = new ElemEmpty(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  100.       int var7 = var2.getLength();
  101.       boolean var8 = false;
  102.  
  103.       for(int var9 = 0; var9 < var7; ++var9) {
  104.          String var10 = var2.getName(var9);
  105.          if (var10.equals("elements")) {
  106.             var8 = true;
  107.             StringTokenizer var11 = new StringTokenizer(var2.getValue(var9), " \t\n\r");
  108.  
  109.             while(var11.hasMoreTokens()) {
  110.                String var12 = var11.nextToken();
  111.                XPath var13 = this.m_stylesheet.createMatchPattern(var12, var6);
  112.                if (var3 == 33) {
  113.                   if (this.m_stylesheet.m_stylesheetRoot.m_whitespacePreservingElements == null) {
  114.                      this.m_stylesheet.m_stylesheetRoot.m_whitespacePreservingElements = new Vector();
  115.                   }
  116.  
  117.                   this.m_stylesheet.m_stylesheetRoot.m_whitespacePreservingElements.addElement(var13);
  118.                } else {
  119.                   if (this.m_stylesheet.m_stylesheetRoot.m_whitespaceStrippingElements == null) {
  120.                      this.m_stylesheet.m_stylesheetRoot.m_whitespaceStrippingElements = new Vector();
  121.                   }
  122.  
  123.                   this.m_stylesheet.m_stylesheetRoot.m_whitespaceStrippingElements.addElement(var13);
  124.                }
  125.             }
  126.          } else if (!this.isAttrOK(var10, var2, var9)) {
  127.             this.m_stylesheet.error(2, new Object[]{var1, var10});
  128.          }
  129.       }
  130.  
  131.       if (!var8) {
  132.          throw new SAXException(XSLMessages.createMessage(33, new Object[]{var1, "elements"}));
  133.       }
  134.    }
  135.  
  136.    public void startElement(String var1, AttributeList var2) throws SAXException {
  137.       this.m_whiteSpaceElems.removeAllElements();
  138.       Locator var3 = this.m_processor.m_stylesheetLocatorStack.isEmpty() ? null : (Locator)this.m_processor.m_stylesheetLocatorStack.peek();
  139.       int var4 = var3 != null ? var3.getLineNumber() : 0;
  140.       int var5 = var3 != null ? var3.getColumnNumber() : 0;
  141.       this.m_stylesheet.pushNamespaces(var2);
  142.       String var6 = this.m_stylesheet.getNamespaceFromStack(var1);
  143.       String var7 = this.getLocalName(var1);
  144.       Object var8 = null;
  145.       int var9 = this.m_elems.size();
  146.       if (var6 == null && var1.indexOf(":") > 0) {
  147.          this.m_processor.warn(22, new Object[]{var1});
  148.       } else if (!this.isXSLTNameSpace(var6)) {
  149.          if (!this.m_inTemplate && var6 != null && (var6.equals("http://xml.apache.org/xslt") || var6.equals("http://xsl.lotus.com/") || var6.equals("http://xsl.lotus.com"))) {
  150.             if (var7.equals("component")) {
  151.                String var27 = null;
  152.                String var32 = null;
  153.                String var41 = null;
  154.                int var48 = var2.getLength();
  155.  
  156.                for(int var52 = 0; var52 < var48; ++var52) {
  157.                   String var56 = var2.getName(var52);
  158.                   if (var56.equals("prefix")) {
  159.                      var27 = var2.getValue(var52);
  160.                   } else if (var56.equals("elements")) {
  161.                      var32 = var2.getValue(var52);
  162.                   } else if (var56.equals("functions")) {
  163.                      var41 = var2.getValue(var52);
  164.                   } else if (!this.isAttrOK(var56, var2, var52)) {
  165.                      this.m_stylesheet.error(2, new Object[]{var1, var56});
  166.                   }
  167.                }
  168.  
  169.                if (var27 == null) {
  170.                   throw new SAXException(XSLMessages.createMessage(34, new Object[]{var1}));
  171.                }
  172.  
  173.                String var57 = this.m_stylesheet.getNamespaceForPrefixFromStack(var27);
  174.                if (var57 == null) {
  175.                   var57 = "";
  176.                }
  177.  
  178.                ExtensionNSHandler var61 = this.m_stylesheet.lookupExtensionNSHandler(var57);
  179.                if (var61 == null) {
  180.                   if (var57 == null) {
  181.                      var57 = "";
  182.                   }
  183.  
  184.                   var61 = new ExtensionNSHandler(this.m_processor, var57);
  185.                   this.m_stylesheet.addExtensionNamespace(var57, var61);
  186.                }
  187.  
  188.                var61.setScript("javaclass", var57, (String)null);
  189.                if (var32 != null) {
  190.                   var61.setElements(var32);
  191.                }
  192.  
  193.                if (var41 != null) {
  194.                   var61.setFunctions(var41);
  195.                }
  196.  
  197.                this.m_LXSLTExtensionNSH = var61;
  198.             } else if (var7.equals("script")) {
  199.                this.m_inLXSLTScript = true;
  200.                this.m_LXSLTScriptBody = new StringBuffer();
  201.                int var28 = var2.getLength();
  202.  
  203.                for(int var33 = 0; var33 < var28; ++var33) {
  204.                   String var42 = var2.getName(var33);
  205.                   if (var42.equals("lang")) {
  206.                      this.m_LXSLTScriptLang = var2.getValue(var33);
  207.                   } else if (var42.equals("src")) {
  208.                      this.m_LXSLTScriptSrcURL = var2.getValue(var33);
  209.                   } else if (!this.isAttrOK(var42, var2, var33)) {
  210.                      this.m_stylesheet.error(2, new Object[]{var1, var42});
  211.                   }
  212.                }
  213.             }
  214.          } else if (!this.m_inTemplate && !this.m_foundStylesheet) {
  215.             int var26 = var2.getLength();
  216.             boolean var31 = false;
  217.  
  218.             for(int var40 = 0; var40 < var26; ++var40) {
  219.                String var47 = var2.getName(var40);
  220.                String var51 = this.m_stylesheet.getNamespaceFromStack(var47);
  221.                if (this.isXSLTNameSpace(var51)) {
  222.                   String var55 = this.getLocalName(var47);
  223.                   if (var55.equals("version")) {
  224.                      String var60 = var2.getValue(var40);
  225.                      this.m_stylesheet.m_XSLTVerDeclared = Double.valueOf(var60);
  226.                      var31 = true;
  227.                   }
  228.                }
  229.             }
  230.  
  231.             if (!var31) {
  232.                this.m_processor.warn(23, (Object[])null);
  233.             }
  234.  
  235.             var8 = this.initWrapperless(var1, var2, var4, var5);
  236.          } else {
  237.             ExtensionNSHandler var25 = null;
  238.             String var30 = null;
  239.             if (var6 != null) {
  240.                int var39 = var2.getLength();
  241.  
  242.                for(int var46 = 0; var46 < var39; ++var46) {
  243.                   String var49 = var2.getName(var46);
  244.                   int var53 = var49.indexOf(58);
  245.                   if (var53 > 0) {
  246.                      String var58 = var49.substring(0, var53);
  247.                      if (!var58.equals("xmlns")) {
  248.                         String var62 = this.m_stylesheet.getNamespaceForPrefixFromStack(var58);
  249.                         if (var62 != null && var62.equals(this.m_stylesheet.m_XSLNameSpaceURL)) {
  250.                            String var69 = var49.substring(var53 + 1);
  251.                            if (var69.equals("extension-element-prefixes")) {
  252.                               String var71 = var2.getValue(var46);
  253.                               StringTokenizer var73 = new StringTokenizer(var71, " \t\n\r", false);
  254.  
  255.                               for(int var75 = 0; var73.hasMoreTokens(); ++var75) {
  256.                                  String var22 = var73.nextToken();
  257.                                  String var23 = this.m_stylesheet.getNamespaceForPrefixFromStack(var22);
  258.                                  if (var6 != null && var6.equals(var23)) {
  259.                                     var25 = new ExtensionNSHandler(this.m_processor, var23);
  260.                                     var30 = var23;
  261.                                     break;
  262.                                  }
  263.                               }
  264.                            }
  265.                         }
  266.                      }
  267.                   }
  268.                }
  269.  
  270.                if (var25 == null) {
  271.                   for(ElemTemplateElement var50 = (ElemTemplateElement)this.m_elems.peek(); var50 != null; var50 = var50.m_parentNode) {
  272.                      int var54 = var50.getXSLToken();
  273.                      String[] var59 = null;
  274.                      if (var54 == 79) {
  275.                         ElemExtensionCall var63 = (ElemExtensionCall)var50;
  276.                         var59 = var63.m_extensionElementPrefixes;
  277.                      } else if (var54 == 77) {
  278.                         ElemLiteralResult var64 = (ElemLiteralResult)var50;
  279.                         var59 = var64.m_extensionElementPrefixes;
  280.                      }
  281.  
  282.                      if (var59 != null) {
  283.                         for(String var72 : var59) {
  284.                            String var74 = this.m_stylesheet.getNamespaceForPrefixFromStack(var72);
  285.                            if (var6 != null && var6.equals(var74)) {
  286.                               var25 = new ExtensionNSHandler(this.m_processor, var74);
  287.                               var30 = var74;
  288.                               break;
  289.                            }
  290.                         }
  291.                      }
  292.                   }
  293.                }
  294.             }
  295.  
  296.             if (var6 != null && var25 == null) {
  297.                var25 = this.m_stylesheet.lookupExtensionNSHandler(var6);
  298.                var30 = var6;
  299.             }
  300.  
  301.             if (var25 != null) {
  302.                if (var30 == null) {
  303.                   var30 = "";
  304.                }
  305.  
  306.                var8 = new ElemExtensionCall(this.m_processor, this.m_stylesheet, var30, var25.scriptLang, var25.scriptSrcURL, var25.scriptSrc, var1, var7, var2, var4, var5);
  307.             } else {
  308.                var8 = new ElemLiteralResult(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  309.             }
  310.          }
  311.       } else {
  312.          if (this.m_stylesheet.m_XSLNameSpaceURL != null) {
  313.             this.m_stylesheet.m_XSLNameSpaceURL = var6;
  314.          }
  315.  
  316.          if (!this.m_foundStylesheet) {
  317.             this.m_stylesheet.initXSLTKeys();
  318.             this.m_stylesheet.m_stylesheetRoot.initDefaultRule();
  319.             this.m_stylesheet.getTemplateList().setIsWrapperless(false);
  320.          }
  321.  
  322.          Object var10 = Stylesheet.m_elementKeys.get(var7);
  323.          int var11 = var10 != null ? (Integer)var10 : -2;
  324.          if (this.m_inTemplate) {
  325.             switch (var11) {
  326.                case 2:
  327.                   var8 = new ElemWithParam(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  328.                   break;
  329.                case 9:
  330.                   var8 = new ElemCopy(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  331.                   break;
  332.                case 11:
  333.                case 19:
  334.                case 26:
  335.                case 27:
  336.                case 31:
  337.                case 32:
  338.                case 33:
  339.                case 40:
  340.                case 54:
  341.                case 63:
  342.                case 76:
  343.                   throw new SAXException(XSLMessages.createMessage(73, new Object[]{var1}));
  344.                case 17:
  345.                   var8 = new ElemCallTemplate(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  346.                   break;
  347.                case 28:
  348.                   var8 = new ElemForEach(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  349.                   break;
  350.                case 30:
  351.                   var8 = new ElemValueOf(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  352.                   break;
  353.                case 34:
  354.                   var8 = new ElemUse(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  355.                   break;
  356.                case 35:
  357.                   var8 = new ElemNumber(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  358.                   break;
  359.                case 36:
  360.                   var8 = new ElemIf(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  361.                   break;
  362.                case 37:
  363.                   var8 = new ElemChoose(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  364.                   break;
  365.                case 38:
  366.                   ElemTemplateElement var38 = (ElemTemplateElement)this.m_elems.peek();
  367.                   if (var38.getXSLToken() != 37) {
  368.                      throw new SAXException(XSLMessages.createMessage(70, (Object[])null));
  369.                   }
  370.  
  371.                   ElemTemplateElement var45 = (ElemTemplateElement)var38.getLastChild();
  372.                   if (var45 != null && var45.getXSLToken() != 38) {
  373.                      throw new SAXException(XSLMessages.createMessage(69, (Object[])null));
  374.                   }
  375.  
  376.                   var8 = new ElemWhen(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  377.                   break;
  378.                case 39:
  379.                   ElemTemplateElement var37 = (ElemTemplateElement)this.m_elems.peek();
  380.                   if (var37.getXSLToken() != 37) {
  381.                      throw new SAXException(XSLMessages.createMessage(72, (Object[])null));
  382.                   }
  383.  
  384.                   ElemTemplateElement var44 = (ElemTemplateElement)var37.getLastChild();
  385.                   if (var44 != null && var44.getXSLToken() != 38) {
  386.                      throw new SAXException(XSLMessages.createMessage(71, (Object[])null));
  387.                   }
  388.  
  389.                   var8 = new ElemOtherwise(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  390.                   break;
  391.                case 41:
  392.                   var8 = new ElemParam(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  393.                   break;
  394.                case 42:
  395.                   this.m_elems.push(new ElemText(this.m_processor, this.m_stylesheet, var1, var2, var4, var5));
  396.                   break;
  397.                case 46:
  398.                   var8 = new ElemElement(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  399.                   break;
  400.                case 48:
  401.                   var8 = new ElemAttribute(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  402.                   break;
  403.                case 50:
  404.                   var8 = new ElemApplyTemplates(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  405.                   break;
  406.                case 57:
  407.                   var8 = new ElemFallback(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  408.                   break;
  409.                case 58:
  410.                   var8 = new ElemPI(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  411.                   break;
  412.                case 59:
  413.                   var8 = new ElemComment(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  414.                   break;
  415.                case 64:
  416.                   try {
  417.                      ElemForEach var36 = (ElemForEach)this.m_elems.peek();
  418.                      ElemSort var43 = new ElemSort(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  419.                      if (var36.m_sortElems == null) {
  420.                         var36.m_sortElems = new Vector();
  421.                      }
  422.  
  423.                      var36.m_sortElems.addElement(var43);
  424.                      var43.m_parentNode = var36;
  425.                      break;
  426.                   } catch (ClassCastException var24) {
  427.                      throw new SAXException(XSLMessages.createMessage(68, (Object[])null));
  428.                   }
  429.                case 72:
  430.                   var8 = new ElemApplyImport(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  431.                   break;
  432.                case 73:
  433.                   var8 = new ElemVariable(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  434.                   break;
  435.                case 74:
  436.                   var8 = new ElemCopyOf(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  437.                   break;
  438.                case 75:
  439.                   var8 = new ElemMessage(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  440.                   break;
  441.                case 83:
  442.                   var8 = new ElemDecimalFormat(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  443.                   break;
  444.                default:
  445.                   if (this.m_stylesheet.m_XSLTVerDeclared <= (double)1.0F) {
  446.                      throw new SAXException(XSLMessages.createMessage(67, new Object[]{var7}));
  447.                   }
  448.             }
  449.          } else {
  450.             if (this.m_foundStylesheet && var11 != 26) {
  451.                this.m_foundNotImport = true;
  452.             }
  453.  
  454.             switch (var11) {
  455.                case 2:
  456.                case 5:
  457.                case 6:
  458.                case 7:
  459.                case 8:
  460.                case 9:
  461.                case 12:
  462.                case 15:
  463.                case 16:
  464.                case 17:
  465.                case 28:
  466.                case 30:
  467.                case 34:
  468.                case 35:
  469.                case 36:
  470.                case 37:
  471.                case 38:
  472.                case 39:
  473.                case 42:
  474.                case 46:
  475.                case 48:
  476.                case 50:
  477.                case 58:
  478.                case 59:
  479.                case 64:
  480.                case 66:
  481.                case 67:
  482.                case 68:
  483.                case 69:
  484.                case 71:
  485.                case 72:
  486.                case 74:
  487.                case 75:
  488.                   throw new SAXException(XSLMessages.createMessage(62, new Object[]{var1}));
  489.                case 19:
  490.                   this.m_template = new ElemTemplate(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  491.                   this.m_elems.push(this.m_template);
  492.                   this.m_inTemplate = true;
  493.                   this.m_stylesheet.getTemplateList().addTemplate(this.m_template);
  494.                   break;
  495.                case 25:
  496.                   this.m_stylesheet.getTemplateList().setIsWrapperless(false);
  497.                   this.m_foundStylesheet = true;
  498.                   int var14 = var2.getLength();
  499.                   boolean var15 = false;
  500.                   int var16 = 0;
  501.  
  502.                   for(; var16 < var14; ++var16) {
  503.                      String var17 = var2.getName(var16);
  504.                      if (var17.equals("result-ns")) {
  505.                         throw new SAXException(XSLMessages.createMessage(63, (Object[])null));
  506.                      }
  507.  
  508.                      if (var17.equals("default-space")) {
  509.                         throw new SAXException(XSLMessages.createMessage(64, (Object[])null));
  510.                      }
  511.  
  512.                      if (var17.equals("exclude-result-prefixes")) {
  513.                         StringToStringTable var18 = this.m_stylesheet.getExcludeResultPrefixes();
  514.                         var18 = this.m_stylesheet.processExcludeResultPrefixes(var2.getValue(var16), var18);
  515.                         this.m_stylesheet.setExcludeResultPrefixes(var18);
  516.                      } else if (var17.equals("extension-element-prefixes")) {
  517.                         StringTokenizer var67 = new StringTokenizer(var2.getValue(var16), " \t\n\r", false);
  518.  
  519.                         while(var67.hasMoreTokens()) {
  520.                            String var19 = var67.nextToken();
  521.                            String var20 = this.m_stylesheet.getNamespaceForPrefixFromStack(var19);
  522.                            if (var20 == null) {
  523.                               var20 = "";
  524.                            }
  525.  
  526.                            ExtensionNSHandler var21 = new ExtensionNSHandler(this.m_processor, var20);
  527.                            this.m_stylesheet.addExtensionNamespace(var20, var21);
  528.                         }
  529.                      } else if (!var17.equals("id")) {
  530.                         if (var17.equals("indent-result")) {
  531.                            throw new SAXException(XSLMessages.createMessage(65, (Object[])null));
  532.                         }
  533.  
  534.                         if (var17.equals("version")) {
  535.                            String var68 = var2.getValue(var16);
  536.                            this.m_stylesheet.m_XSLTVerDeclared = Double.valueOf(var68);
  537.                            var15 = true;
  538.                         } else if (!this.isAttrOK(var17, var2, var16) && !this.processSpaceAttr(var17, var2, var16) && !this.m_stylesheet.getTemplateList().getIsWrapperless()) {
  539.                            throw new SAXException(XSLMessages.createMessage(66, new Object[]{var1, var17}));
  540.                         }
  541.                      }
  542.  
  543.                      if (!this.m_stylesheet.m_namespaces.empty()) {
  544.                         this.m_stylesheet.m_namespaceDecls = (NameSpace)this.m_stylesheet.m_namespaces.peek();
  545.                      }
  546.                   }
  547.  
  548.                   if (!var15) {
  549.                      this.m_processor.warn(23, (Object[])null);
  550.                   }
  551.                   break;
  552.                case 26:
  553.                   this.processImport(var1, var2);
  554.                   break;
  555.                case 27:
  556.                   this.processInclude(var1, var2);
  557.                   break;
  558.                case 31:
  559.                   ElemEmpty var35 = new ElemEmpty(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  560.                   this.m_stylesheet.processKeyElement(var35, var2);
  561.                   break;
  562.                case 32:
  563.                case 33:
  564.                   this.processStripAndPreserve(var1, var2, var11, var4, var5);
  565.                   break;
  566.                case 40:
  567.                   this.m_inTemplate = true;
  568.                   ElemAttributeSet var34 = new ElemAttributeSet(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  569.                   this.m_elems.push(var34);
  570.                   break;
  571.                case 41:
  572.                case 73:
  573.                   Object var12 = var11 == 41 ? new ElemParam(this.m_processor, this.m_stylesheet, var1, var2, var4, var5) : new ElemVariable(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  574.                   this.m_elems.push(var12);
  575.                   this.m_inTemplate = true;
  576.                   this.m_stylesheet.setTopLevelVariable((ElemVariable)var12);
  577.                   ((ElemVariable)var12).m_isTopLevel = true;
  578.                   break;
  579.                case 54:
  580.                   if (var6 != null && !var6.equals("http://xml.apache.org/xslt") && !var6.equals("http://xsl.lotus.com/") && !var6.equals("http://xsl.lotus.com")) {
  581.                      this.m_processor.warn(9, new Object[]{"http://xml.apache.org/xslt"});
  582.                   }
  583.                   break;
  584.                case 65:
  585.                   this.m_processor.m_translateCSS = true;
  586.                   break;
  587.                case 76:
  588.                   this.m_processor.warn(80);
  589.                   break;
  590.                case 80:
  591.                   this.m_stylesheet.m_stylesheetRoot.processOutputSpec(var1, var2);
  592.                   break;
  593.                case 83:
  594.                   ElemDecimalFormat var13 = new ElemDecimalFormat(this.m_processor, this.m_stylesheet, var1, var2, var4, var5);
  595.                   this.m_stylesheet.processDecimalFormatElement(var13, var2);
  596.                   break;
  597.                case 84:
  598.                   this.m_stylesheet.processNSAliasElement(var1, var2);
  599.                   break;
  600.                default:
  601.                   throw new SAXException(XSLMessages.createMessage(67, new Object[]{var7}));
  602.             }
  603.          }
  604.       }
  605.  
  606.       if (this.m_inTemplate && var8 != null) {
  607.          if (!this.m_elems.empty()) {
  608.             ElemTemplateElement var29 = (ElemTemplateElement)this.m_elems.peek();
  609.             var29.appendChild((Node)var8);
  610.          }
  611.  
  612.          this.m_elems.push(var8);
  613.       }
  614.  
  615.       if (var9 == this.m_elems.size()) {
  616.          this.m_elems.push(new ElemEmpty(this.m_processor, this.m_stylesheet, var1, var2, var4, var5));
  617.       }
  618.  
  619.    }
  620.  
  621.    private ElemTemplateElement initWrapperless(String var1, AttributeList var2, int var3, int var4) throws SAXException {
  622.       this.m_stylesheet.initXSLTKeys();
  623.       this.m_stylesheet.m_stylesheetRoot.initDefaultRule();
  624.       MutableAttrListImpl var5 = new MutableAttrListImpl();
  625.       var5.addAttribute("name", "CDATA", "simple");
  626.       this.m_template = new ElemTemplate(this.m_processor, this.m_stylesheet, "xsl:template", var5, var3, var4);
  627.       ElemLiteralResult var6 = new ElemLiteralResult(this.m_processor, this.m_stylesheet, var1, var2, var3, var4);
  628.       this.m_template.appendChild(var6);
  629.       this.m_inTemplate = true;
  630.       this.m_stylesheet.getTemplateList().setWrapperlessTemplate(this.m_template);
  631.       this.m_stylesheet.getTemplateList().setIsWrapperless(true);
  632.       this.m_foundStylesheet = true;
  633.       if (var1.equals("HTML")) {
  634.          this.m_stylesheet.m_stylesheetRoot.m_indentResult = true;
  635.          this.m_stylesheet.m_stylesheetRoot.setOutputMethod("html");
  636.       }
  637.  
  638.       return var6;
  639.    }
  640.  
  641.    private void processImport(String var1, AttributeList var2) throws SAXException {
  642.       int var3 = var2.getLength();
  643.       boolean var4 = false;
  644.  
  645.       for(int var5 = 0; var5 < var3; ++var5) {
  646.          String var6 = var2.getName(var5);
  647.          if (var6.equals("href")) {
  648.             var4 = true;
  649.             if (this.m_foundNotImport) {
  650.                throw new SAXException(XSLMessages.createMessage(75, (Object[])null));
  651.             }
  652.  
  653.             String var7 = this.m_stylesheet.m_XSLNameSpaceURL;
  654.             String var8 = var2.getValue(var5);
  655.             URL var9 = this.m_processor.getURLFromString(var8, ((URL)this.m_stylesheet.m_includeStack.peek()).toString());
  656.             if (this.stackContains(this.m_stylesheet.m_stylesheetRoot.m_importStack, var9)) {
  657.                throw new SAXException(XSLMessages.createMessage(76, new Object[]{var9}));
  658.             }
  659.  
  660.             this.m_stylesheet.m_stylesheetRoot.m_importStack.push(var9);
  661.  
  662.             try {
  663.                Stylesheet var10 = new Stylesheet(this.m_stylesheet.m_stylesheetRoot, this.m_processor, var9.toExternalForm());
  664.                StylesheetHandler var11 = new StylesheetHandler(this.m_processor, var10);
  665.                var10.m_baseIdent = var9.toExternalForm();
  666.                this.m_processor.parseXML(var9, var11, var10);
  667.                this.m_stylesheet.m_imports.insertElementAt(var10, 0);
  668.                var10.m_stylesheetParent = this.m_stylesheet;
  669.             } catch (MalformedURLException var12) {
  670.                throw new SAXException(XSLMessages.createMessage(35, new Object[]{var2.getValue(var5)}), var12);
  671.             } catch (FileNotFoundException var13) {
  672.                throw new SAXException(XSLMessages.createMessage(36, new Object[]{var2.getValue(var5)}), var13);
  673.             } catch (IOException var14) {
  674.                throw new SAXException(XSLMessages.createMessage(37, new Object[]{var2.getValue(var5)}), var14);
  675.             }
  676.  
  677.             this.m_stylesheet.m_stylesheetRoot.m_importStack.pop();
  678.             this.m_stylesheet.m_XSLNameSpaceURL = var7;
  679.          } else if (!this.isAttrOK(var6, var2, var5)) {
  680.             this.m_stylesheet.error(2, new Object[]{var1, var6});
  681.          }
  682.       }
  683.  
  684.       if (!var4) {
  685.          throw new SAXException(XSLMessages.createMessage(38, new Object[]{var1}));
  686.       }
  687.    }
  688.  
  689.    private boolean stackContains(Stack var1, URL var2) {
  690.       int var3 = ((Vector)var1).size();
  691.       boolean var4 = false;
  692.  
  693.       for(int var5 = 0; var5 < var3; ++var5) {
  694.          URL var6 = (URL)((Vector)var1).elementAt(var5);
  695.          if (var6.toString().equals(var2.toString())) {
  696.             var4 = true;
  697.             break;
  698.          }
  699.       }
  700.  
  701.       return var4;
  702.    }
  703.  
  704.    private void processInclude(String var1, AttributeList var2) throws SAXException {
  705.       int var3 = var2.getLength();
  706.       boolean var4 = false;
  707.  
  708.       for(int var5 = 0; var5 < var3; ++var5) {
  709.          String var6 = var2.getName(var5);
  710.          if (var6.equals("href")) {
  711.             var4 = true;
  712.             Stack var7 = this.m_elems;
  713.             this.m_elems = new Stack();
  714.             ElemTemplate var8 = this.m_template;
  715.             this.m_template = null;
  716.             ElemTemplateElement var9 = this.m_lastPopped;
  717.             this.m_lastPopped = null;
  718.             boolean var10 = this.m_inTemplate;
  719.             this.m_inTemplate = false;
  720.             boolean var11 = this.m_foundStylesheet;
  721.             this.m_foundStylesheet = false;
  722.             String var12 = this.m_stylesheet.m_XSLNameSpaceURL;
  723.             boolean var13 = this.m_foundNotImport;
  724.             this.m_foundNotImport = false;
  725.             NameSpace var14 = this.m_stylesheet.m_namespaceDecls;
  726.             this.m_stylesheet.m_namespaceDecls = null;
  727.             Stack var15 = this.m_stylesheet.m_namespaces;
  728.             this.m_stylesheet.m_namespaces = new Stack();
  729.             String var16 = var2.getValue(var5);
  730.             URL var17 = this.m_processor.getURLFromString(var16, ((URL)this.m_stylesheet.m_includeStack.peek()).toString());
  731.             if (this.stackContains(this.m_stylesheet.m_includeStack, var17)) {
  732.                throw new SAXException(XSLMessages.createMessage(76, new Object[]{var17}));
  733.             }
  734.  
  735.             this.m_stylesheet.m_includeStack.push(var17);
  736.  
  737.             try {
  738.                this.m_processor.parseXML(var17, this, this.m_stylesheet);
  739.             } catch (IOException var19) {
  740.                throw new SAXException(XSLMessages.createMessage(40, (Object[])null), var19);
  741.             }
  742.  
  743.             this.m_stylesheet.m_includeStack.pop();
  744.             this.m_elems = var7;
  745.             this.m_template = var8;
  746.             this.m_lastPopped = var9;
  747.             this.m_inTemplate = var10;
  748.             this.m_foundStylesheet = var11;
  749.             this.m_stylesheet.m_XSLNameSpaceURL = var12;
  750.             this.m_foundNotImport = var13;
  751.             this.m_stylesheet.m_namespaceDecls = var14;
  752.             this.m_stylesheet.m_namespaces = var15;
  753.          } else if (!this.isAttrOK(var6, var2, var5)) {
  754.             this.m_stylesheet.error(2, new Object[]{var1, var6});
  755.          }
  756.       }
  757.  
  758.       if (!var4) {
  759.          throw new SAXException(XSLMessages.createMessage(38, new Object[]{var1}));
  760.       }
  761.    }
  762.  
  763.    public void endElement(String var1) throws SAXException {
  764.       this.m_stylesheet.popNamespaces();
  765.       this.m_lastPopped = (ElemTemplateElement)this.m_elems.pop();
  766.       this.m_lastPopped.m_finishedConstruction = true;
  767.       int var2 = this.m_lastPopped.getXSLToken();
  768.       if (var2 == 19) {
  769.          this.m_inTemplate = false;
  770.       } else if (var2 != 41 && var2 != 73) {
  771.          if (var2 == 40) {
  772.             this.m_inTemplate = false;
  773.          }
  774.       } else {
  775.          ElemVariable var3 = (ElemVariable)this.m_lastPopped;
  776.          if (var3.m_isTopLevel) {
  777.             this.m_inTemplate = false;
  778.          }
  779.       }
  780.  
  781.       if (this.m_inLXSLTScript) {
  782.          if (this.m_LXSLTScriptLang == null) {
  783.             throw new SAXException(XSLMessages.createMessage(41, new Object[]{var1}));
  784.          } else if (this.m_LXSLTExtensionNSH == null) {
  785.             throw new SAXException(XSLMessages.createMessage(42, new Object[]{var1}));
  786.          } else {
  787.             this.m_LXSLTExtensionNSH.setScript(this.m_LXSLTScriptLang, this.m_LXSLTScriptSrcURL, this.m_LXSLTScriptBody.toString());
  788.             this.m_inLXSLTScript = false;
  789.             this.m_LXSLTScriptLang = null;
  790.             this.m_LXSLTScriptSrcURL = null;
  791.             this.m_LXSLTScriptBody = null;
  792.             this.m_LXSLTExtensionNSH = null;
  793.          }
  794.       } else {
  795.          if (this.m_LXSLTExtensionNSH != null) {
  796.             this.m_inLXSLTScript = false;
  797.             this.m_LXSLTScriptLang = null;
  798.             this.m_LXSLTScriptSrcURL = null;
  799.             this.m_LXSLTScriptBody = null;
  800.             this.m_LXSLTExtensionNSH = null;
  801.          }
  802.  
  803.       }
  804.    }
  805.  
  806.    public static boolean isSpace(char var0) {
  807.       return var0 == ' ' || var0 == '\t' || var0 == '\r' || var0 == '\n';
  808.    }
  809.  
  810.    public boolean isWhiteSpace(char[] var1, int var2, int var3) {
  811.       boolean var4 = true;
  812.       int var5 = var2 + var3;
  813.  
  814.       for(int var6 = var2; var6 < var5; ++var6) {
  815.          if (!isSpace(var1[var6])) {
  816.             var4 = false;
  817.             break;
  818.          }
  819.       }
  820.  
  821.       return var4;
  822.    }
  823.  
  824.    public void characters(char[] var1, int var2, int var3) throws SAXException {
  825.       if (!this.m_inTemplate) {
  826.          if (this.m_inLXSLTScript) {
  827.             this.m_LXSLTScriptBody.append(var1, var2, var3);
  828.          }
  829.       } else {
  830.          ElemTemplateElement var4 = (ElemTemplateElement)this.m_elems.peek();
  831.          boolean var5 = false;
  832.          boolean var6 = false;
  833.          if (var4.getXSLToken() == 42) {
  834.             var6 = ((ElemText)var4).m_disableOutputEscaping;
  835.             var4 = (ElemTemplateElement)this.m_elems.elementAt(this.m_elems.size() - 2);
  836.             var5 = true;
  837.          }
  838.  
  839.          Locator var7 = this.m_processor.m_stylesheetLocatorStack.isEmpty() ? null : (Locator)this.m_processor.m_stylesheetLocatorStack.peek();
  840.          int var8 = var7 != null ? var7.getLineNumber() : 0;
  841.          int var9 = var7 != null ? var7.getColumnNumber() : 0;
  842.          ElemTextLiteral var10 = new ElemTextLiteral(this.m_processor, this.m_stylesheet, var1, var2, var3, false, var5, var6, var8, var9);
  843.          boolean var11 = this.isWhiteSpace(var1, var2, var3);
  844.          if (var5 || !var5 && !var11) {
  845.             while(!this.m_whiteSpaceElems.isEmpty()) {
  846.                ElemTextLiteral var17 = (ElemTextLiteral)this.m_whiteSpaceElems.pop();
  847.                var4.appendChild(var17);
  848.             }
  849.  
  850.             var4.appendChild(var10);
  851.             return;
  852.          }
  853.  
  854.          if (var11) {
  855.             boolean var12 = true;
  856.             Node var13 = var4.getLastChild();
  857.             if (var13 != null) {
  858.                ElemTemplateElement var14 = (ElemTemplateElement)var13;
  859.                boolean var15 = var14.getXSLToken() == 78;
  860.                boolean var16 = this.m_lastPopped != null && this.m_lastPopped.getXSLToken() == 42;
  861.                if (var15 && !var16) {
  862.                   var4.appendChild(var10);
  863.                   var12 = false;
  864.                }
  865.             }
  866.  
  867.             if (var12) {
  868.                this.m_whiteSpaceElems.push(var10);
  869.                return;
  870.             }
  871.          }
  872.       }
  873.  
  874.    }
  875.  
  876.    public void cdata(char[] var1, int var2, int var3) throws SAXException {
  877.       if (this.m_inTemplate) {
  878.          ElemTemplateElement var4 = (ElemTemplateElement)this.m_elems.peek();
  879.          boolean var5 = false;
  880.          boolean var6 = false;
  881.          if (var4.getXSLToken() == 42) {
  882.             var6 = ((ElemText)var4).m_disableOutputEscaping;
  883.             var4 = (ElemTemplateElement)this.m_elems.elementAt(this.m_elems.size() - 2);
  884.             var5 = true;
  885.          }
  886.  
  887.          Locator var7 = this.m_processor.m_stylesheetLocatorStack.isEmpty() ? null : (Locator)this.m_processor.m_stylesheetLocatorStack.peek();
  888.          int var8 = var7 != null ? var7.getLineNumber() : 0;
  889.          int var9 = var7 != null ? var7.getColumnNumber() : 0;
  890.          ElemTextLiteral var10 = new ElemTextLiteral(this.m_processor, this.m_stylesheet, var1, var2, var3, true, var5, var6, var8, var9);
  891.          boolean var11 = this.isWhiteSpace(var1, var2, var3);
  892.          if (var5 || !var5 && !var11) {
  893.             while(!this.m_whiteSpaceElems.isEmpty()) {
  894.                ElemTextLiteral var17 = (ElemTextLiteral)this.m_whiteSpaceElems.pop();
  895.                var4.appendChild(var17);
  896.             }
  897.  
  898.             var4.appendChild(var10);
  899.          } else if (var11) {
  900.             boolean var12 = true;
  901.             Node var13 = var4.getLastChild();
  902.             if (var13 != null) {
  903.                ElemTemplateElement var14 = (ElemTemplateElement)var13;
  904.                boolean var15 = var14.getXSLToken() == 78;
  905.                boolean var16 = this.m_lastPopped != null && this.m_lastPopped.getXSLToken() == 42;
  906.                if (var15 && !var16) {
  907.                   var4.appendChild(var10);
  908.                   var12 = false;
  909.                }
  910.             }
  911.  
  912.             if (var12) {
  913.                this.m_whiteSpaceElems.push(var10);
  914.             }
  915.          }
  916.       } else if (this.m_inLXSLTScript) {
  917.          this.m_LXSLTScriptBody.append(var1, var2, var3);
  918.       }
  919.  
  920.       this.m_lastPopped = null;
  921.    }
  922.  
  923.    public void ignorableWhitespace(char[] var1, int var2, int var3) throws SAXException {
  924.       this.m_lastPopped = null;
  925.    }
  926.  
  927.    public void processingInstruction(String var1, String var2) throws SAXException {
  928.    }
  929.  
  930.    public void comment(String var1) throws SAXException {
  931.    }
  932.  
  933.    public void entityReference(String var1) throws SAXException {
  934.    }
  935. }
  936.